#pragma once

class ProgramData:public ObjectData{
public:
    ProgramData();
    virtual ~ProgramData();

    GLuint getAttachedVertexShader();
    GLuint getAttachedFragmentShader();
    GLuint getAttachedShader(GLenum type);

    bool attachShader(GLuint shader,GLenum type);
    bool isAttached(GLuint shader);
    bool detachShader(GLuint shader);

    void setLinkStatus(GLint status);
    GLint getLinkStatus();

    void setInfoLog(GLchar *log);
    GLchar* getInfoLog();

    bool isInUse() const { return IsInUse; }
    void setInUse(bool inUse) { IsInUse = inUse; }

    bool getDeleteStatus() const { return DeleteStatus; }
    void setDeleteStatus(bool status) { DeleteStatus = status; }
private:
    GLuint AttachedVertexShader;
    GLuint AttachedFragmentShader;
    GLint  LinkStatus;
    GLchar* infoLog;
    bool    IsInUse;
    bool    DeleteStatus;
};